package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"message": "pong",
		})
	})
	/**
	在 Gin 框架中，路由路径中以冒号 ":" 开头的部分表示参数，而以星号 "*" 开头的部分表示通配符。

	在您提供的代码中，有两个路由处理程序示例：

	1. `r.GET("/user/:name/:action/", func(c *gin.Context) { ... })`

	   这个路由定义了两个参数，`:name` 和 `:action`。当请求与此路由匹配时，Gin 将从 URL 中提取出这两个参数的值，并将它们作为键值对存储在 `c.Params` 的映射中。您可以使用 `c.Param("name")` 和 `c.Param("action")` 来获取这些参数的值。

	   例如，如果访问的 URL 是 `/user/john/update/`，那么 `name` 参数的值将是 `"john"`，`action` 参数的值将是 `"update"`。

	2. `r.GET("/user/:name/*action", func(c *gin.Context) { ... })`

	   这个路由定义了一个参数 `:name` 和一个通配符 `*action`。当请求与此路由匹配时，Gin 将从 URL 中提取出 `:name` 参数的值，并将剩余的路径作为字符串提取到 `*action` 参数中。同样，参数的值将存储在 `c.Params` 的映射中。

	   例如，如果访问的 URL 是 `/user/john/update/profile`，那么 `name` 参数的值将是 `"john"`，而 `action` 参数的值将是 `"update/profile"`。

	总结来说，区别在于 `:action` 是一个具体的参数，它仅匹配单个路径段，而 `*action` 是一个通配符，它匹配剩余的路径片段，包括斜杠 "/"

	希望这个解释能够帮助您理解 `*action` 和 `:action` 的区别。如果您有任何其他问题，请随时提问。
	*/

	r.GET("/user/:name/:action/", func(c *gin.Context) {
		name := c.Param("name")
		action := c.Param("action")
		c.String(http.StatusOK, "%s is %s", name, action)
	})

	r.GET("/user/:name/*action", func(c *gin.Context) {
		name := c.Param("name")
		action := c.Param("action")
		c.String(http.StatusOK, "%s is %s", name, action)
	})

	r.Run()
}
